
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include "../imagepipe.h"


#define P2(x) ((x)*(x))

#define MIN(a,b)       ( (a)<(b) ? (a) : (b) )
#define MAX(a,b)       ( (a)>(b) ? (a) : (b) )


int diff( Image &img, int x, int y )
{
	Rgb p = img.pixel(x,y);
	return pixelDiff( img.pixel(x-1,y), p ) + pixelDiff( img.pixel(x+1,y), p ) +
	       pixelDiff( img.pixel(x,y-1), p ) + pixelDiff( img.pixel(x,y+1), p );
}


extern "C"
{


void applyFilter( const Image &img, Image &dst, const Rect &r )
{
	Image orig( new Rgb[ img.width() * img.height() ], img.width(), img.height() );
	orig.copy( img );
	
	for( int x = MAX( 1, r.x ); x < MIN( img.width()-1, r.w ); x ++ ) {
		for( int y = MAX( 1, r.y ); y < MIN( img.height()-1, r.h ); y ++ ) {
			int d = diff( orig, x, y );
			if( diff( orig, x, y ) > 100 ) {
				// img.pixel(x,y) = RGB(0,0,0);
#ifndef MEMCOPY
				dst.pixel( x, y ) = img.pixel( x, y );
#endif
			}
			else {
				dst.pixel(x,y) = RGB(255,255,255);
			}
		}
	}
	
	/*
	for( int x = 0; x < img.width(); x ++ ) { img.pixel(x,0) = RGB(0,0,0); }
	for( int x = 0; x < img.width(); x ++ ) { img.pixel(x,img.height()-1) = RGB(0,0,0); }
	for( int y = 0; y < img.height(); y ++ ) { img.pixel(0,y) = RGB(0,0,0); }
	for( int y = 0; y < img.height(); y ++ ) { img.pixel(img.width()-1,y) = RGB(0,0,0); }
	*/
	
	delete[] orig.data();
}


}
